/**
 * this的使用
 * 本质：当前对象的地址
 * 普通方法中:  this总是指向调用该方法的对象
 * 构造方法中：  this总是指向正要初始化的对象
 * 普通方法中隐式参数，可以不写this
 * this()调用重载的构造方法，避免相同的初始化代码，但只能在构造方法中用，并且必须位于构造方法的第一句
 * this不能用于static方法中,因为不知道调用堆（heep）中的哪个对象，而且对象中不一定有static
 */

public class TestThis {
    int a,b,c;//成员变量
    //构造器
    TestThis(){
        System.out.println("正要初始化对象"+this);
    }
    TestThis(int a,int b){
        //TestThis();这样是无法调用构造方法的
        /*this();//调用上面调用无参的构造方法  不调用不可以打印//调用无参的构造方法，并且必须放在第一行
       this.a = a;*/

       // a = a;  如果没有this ,这里指的是局部变量（上面的 int a,int b），而不是成员变量
        //这样区分了成员变量和局部变量，这种情况占了this的大多数的使用情况
        this.a = a;
        this.b = b;
    }
    TestThis(int a, int b,int c){
        //调用带参的构造方法，并且必须放在第一行
        this(a,b);
        this.c = c;
    }


    void sing(){
    }
    void eat(){
        System.out.println("当前对象："+this);
        sing();//调用本类中的sing();//也可以写this.sing();
        System.out.println("一起唱歌");
    }

    public static void main(String[] args) {
        TestThis h1 = new TestThis(2,3);
        h1.eat();
    }
}
